
package Terror;


import java.io.IOException;
import java.io.InputStream;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import java.util.Random;

/**
 * @author Maria Fernanda Martinez, Adrian Martinez, Darwin Rivas
 */
//Constructor
public class Terror2MIDPCanvas extends GameCanvas implements CommandListener, Runnable {

    
    Thread hilo;
    Graphics g;
  
    int coorX=10; //coordenada del jugador en x
    int coorY=200; //coordenada del jugador en y
    int dx=5;
    int dy=5;
    int tmp;
    int tecla=0;
    boolean scriptbool=false;
    String comandos;
    Command ok;
    long time=0;
    private Sprite dollAction;
    Player pbg, player;
    String mensaje = "";
    String mensaje2 = "";
    boolean pressed=false;
    boolean llave=false; //verificar si encontro la llave
    Random rnd = new Random(); //esconder la llave en cualquier lugar
    int verificar; // verifica que la llave se halle en ese objecto
    int tiempo=100; //tiempo de vida
    int cont_seg=0;
    String ver_tiempo="100";
    boolean GameOver=false;
    boolean win = false;
    private Command exitCommand;
    private Command scriptCommand;
    boolean ingles=false;
    Form formulario = new Form("Script"); // script para los movimiento ingresados
    TextField script=new TextField("Orden:", "", 30, TextField.ANY);
    StringItem item;
    
    Display orden;
    TerrMIDlet midletAnterior;
    
    
    /**
     * Nombre: playsnBg
     * Descripcion: Metodo para reproducir el sonido de fondo
     * No hay valor de retorno
     * Pre: existe el archivo a reproducir
     * Post: el audio se reproduce
     * @param media
     */
    public void playsndBg(String media) {
       try {
        InputStream is = getClass().getResourceAsStream(media);
        pbg = Manager.createPlayer(is, "audio/midi");
        //Indica que se debe reproducir en un loop 
        pbg.setLoopCount(-1);
        pbg.prefetch();
        pbg.setMediaTime(time);
        pbg.start();
        } catch (IOException ex) {
        } catch (MediaException ex) {
        } 
    }
    
    /**
     * Nombre: getDollAction
     * Descripción: acceder al valor de dollAction
     * Pre: existe dollAction
     * Post: regresa el valor de dollAction
     * No hay parámetros
     * @return Sprite
     */
    public Sprite getDollAction() {
        return dollAction;
    }

    /**
     * Nombre: setDollAction
     * Descripción: asigna un valor a dollAction
     * Pre: dollAction no es null
     * Post: dollAction tiene un valor
     * No hay valor de retorno
     * @param dollAction 
     */
    public void setDollAction(Sprite dollAction) {
        this.dollAction = dollAction;
    }
    
    //Imágenes para mostrar en pantalla
    Sprite back,front,left,right,carpet,table,background,drawer, text, bed, candles;
    Sprite chair1, chair2,chair3, candles2, chest, plant2, table1, key, plant1;
    Sprite game_over0,game_over1,game_over2,game_over3,game_over4,game_over5, Game_Over, Winner;
    
    /**
     * Nombre: TerrorMIDPCanvas
     * Descripción: constructor de la clase
     * Pre: todas las imágenes a usar existen
     * Post: escenario de juego construido
     * No hay parámetros ni valor de retorno
     * @param midletAnterior 
     */
    public Terror2MIDPCanvas( TerrMIDlet midletAnterior) {
        super(true);
        g=getGraphics();
        this.midletAnterior = midletAnterior;
        try {
            // Set up this canvas to listen to command events
            setCommandListener(this);
            tmp=0;
            // Crear todas las imágenes
            back = new Sprite(Image.createImage("/Graphics/back.png"),11,16);
            front = new Sprite(Image.createImage("/Graphics/front.png"),11,16);
            left = new Sprite(Image.createImage("/Graphics/left.png"),9,16);
            right = new Sprite(Image.createImage("/Graphics/right.png"),9,16);
            carpet = new Sprite(Image.createImage("/Graphics/carpet.png"),64,65);
            table = new Sprite(Image.createImage("/Graphics/table4.png"),23,24);
            drawer = new Sprite(Image.createImage("/Graphics/drawer.png"),33,34);
            background=new Sprite(Image.createImage("/Graphics/background2.png"),220,167);
            text = new Sprite(Image.createImage("/Graphics/text.png"),210,50);
            plant1 = new Sprite(Image.createImage("/Graphics/plant.png"),15,30);
            bed = new Sprite(Image.createImage("/Graphics/bed2.png"),29,55);
            chair1 = new Sprite(Image.createImage("/Graphics/chair2.png"),17,21);
            chair2 = new Sprite(Image.createImage("/Graphics/chair2.png"),17,21);
            chair3 = new Sprite(Image.createImage("/Graphics/chair3.png"),22,20);
            candles2 = new Sprite(Image.createImage("/Graphics/candles2.png"),16,15);
            candles = new Sprite(Image.createImage("/Graphics/candles.png"),14,34);
            chest = new Sprite(Image.createImage("/Graphics/chest.png"),19,33);
            table1 = new Sprite(Image.createImage("/Graphics/table3.png"),37,36);
            plant2 = new Sprite(Image.createImage("/Graphics/plant2.png"),20,34);
            key = new Sprite(Image.createImage("/Graphics/key.png"),9,15); 
            game_over0 = new Sprite(Image.createImage("/Graphics/gameover0.png"),220,170); 
            game_over1 = new Sprite(Image.createImage("/Graphics/gameover1.png"),220,170); 
            game_over2 = new Sprite(Image.createImage("/Graphics/gameover2.png"),220,170); 
            game_over3 = new Sprite(Image.createImage("/Graphics/gameover3.png"),220,170); 
            game_over4 = new Sprite(Image.createImage("/Graphics/gameover4.png"),220,170); 
            game_over5 = new Sprite(Image.createImage("/Graphics/gameover5.png"),220,170); 
            Game_Over = new Sprite(Image.createImage("/Graphics/Game over.png"),192,32); 
            Winner = new Sprite(Image.createImage("/Graphics/You-Win.png"),220,170); 
            verificar=rnd.nextInt(11);
            //Comandos
            exitCommand = new Command("Exit",Command.EXIT,1);
            scriptCommand = new Command("Script",Command.SCREEN,1);
            
            addCommand(exitCommand);
            addCommand(scriptCommand);
            setCommandListener(this);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
 
    /** 
     * Nombre Iniciar
     * Descripcion:Inicializa todos los parametros utilizados para el juego, 
     * que se cambian durante el juego y deben ser reiniciados para  cada juego nuevo
     * pre: no hay
     * post: no hay
     * No recibe o retorna ningun parametro
     **/
    public void iniciar(){
        hilo=new Thread(this);
        hilo.start();
        playsndBg("/Sounds/creepy2.mid"); // Inicia música
        coorX=10; //coordenada del jugador en x
        coorY=200; //coordenada del jugador en y
        time=0;
        mensaje = "";
        mensaje2 = "";
        pressed=false;
        llave=false; //verificar si encontro la llave
        verificar=rnd.nextInt(11); 
        tiempo=100; //tiempo de vida
        cont_seg=0;
        ver_tiempo="100";
        GameOver=false;
        win = false;
    }
    
    /**
     * Nombre: getCoorX
     * Descripción: acceder al valor de x
     * Pre: x >= 0
     * Post: regresa valor de x
     * @param x de tipo int
     * @return int
     */
    public int getCoorX(int x){
        return(x*getWidth())/200;
    }
    
    /**
     * Nombre: getCoorY
     * Descripción: acceder al valor de y
     * Pre: y >= 0
     * Post: regresa el valor de y
     * @param y de tipo int
     * @return int
     */
    public int getCoorY(int y){
        return (y*getHeight())/200;
    }

   /**
     * Nombre: run
     * Descripción: Corre el juego mientras no haya Gameover/Win. verifica la teclas presionadas
     * y llama a enventotecla para realizar la accion de acuerdo a la tecla presionada. tambien
     * realiza los movimientos del script si esta esta activado
     * Pre: no hay
     * Post: programa en ejecución
     * No hay parámetros ni valor de retorno
     */
    public void run(){
        while(!GameOver){
            tecla = getKeyStates();
            eventoTecla();
            paint();
            if(scriptbool)
                doScript();
        }
        hilo.interrupt();
        pbg.close();
    }
    
    
    
    /**
     * Nombre: paint
     * Descripción:
     * Pre: no hay
     * Post: no hay
     * No hay valor de retorno ni parámetros
     */
    public void paint(){
        paintLayer();
        paintSprite();
    }
    
    /**
     * Nombre: paintLayer
     * Descripción:Pinta en pantalla el fondo del juego 
     * Pre: no hay
     * Post: no hay
     * No hay valor de retorno ni paráemtros
     */
    public void paintLayer(){
        g.setColor(0x000001);
        g.fillRect(getCoorX(0), getCoorY(0), getCoorX(200), getCoorY(200));
    }
   
    /**
     * Nombre: paintSprite
     * Descripción: pinta en pantalla todas las imágenes del juego
     * Pre: existen las imágenes
     * Post: imágenes dibujadas
     * No hay valor de retorno ni parámetros
     */
    public void paintSprite(){
        background.setPosition(getCoorX(0),getCoorY(0));
        background.paint(g);
        carpet.setPosition(getCoorX(135),getCoorY(115));
        carpet.paint(g);
        chair1.setPosition(getCoorX(140), getCoorY(125));
        chair1.paint(g);
        table.setPosition(getCoorX(155), getCoorY(140));
        table.paint(g);
        chair2.setPosition(getCoorX(175), getCoorY(122));
        chair2.paint(g);
        bed.setPosition(getCoorX(8), getCoorY(32));
        bed.paint(g);
        table1.setPosition(getCoorX(73), getCoorY(100));
        table1.paint(g);
        candles.setPosition(getCoorX(180), getCoorY(190)-candles.getHeight());
        candles.paint(g);
        drawer.setPosition(getCoorX(195)-drawer.getWidth(), getCoorY(60)-drawer.getHeight());
        drawer.paint(g);
        plant1.setPosition(getCoorX(80), getCoorY(60)-plant1.getHeight());
        plant1.paint(g);
        candles2.setPosition(getCoorX(83), getCoorY(105));
        candles2.paint(g);
        chair3.setPosition(getCoorX(80), getCoorY(139));
        chair3.paint(g);
        chest.setPosition(getCoorX(8), getCoorY(120));
        chest.paint(g);
        plant2.setPosition(getCoorX(175), getCoorY(110)-plant2.getHeight());
        plant2.paint(g);
        getDollAction().setPosition(getCoorX(coorX), getCoorY(coorY)-back.getHeight());
        getDollAction().paint(g);
        getDollAction().nextFrame();
        // Si el tiempo de vida ha terminado, el juego termina
        if(tiempo<=0&&!win){
            try {
                game_over0.setPosition(getCoorX(0), getCoorY(0));
                game_over0.paint(g);
                hilo.sleep(500);
                flushGraphics();
                game_over1.setPosition(getCoorX(0), getCoorY(0));
                game_over1.paint(g);
                hilo.sleep(100);
                flushGraphics();
                game_over2.setPosition(getCoorX(0), getCoorY(0));
                game_over2.paint(g);
                hilo.sleep(100);
                flushGraphics();
                game_over3.setPosition(getCoorX(0), getCoorY(0));
                game_over3.paint(g);
                hilo.sleep(100);
                flushGraphics();
                game_over4.setPosition(getCoorX(0), getCoorY(0));
                game_over4.paint(g);
                hilo.sleep(100);
                flushGraphics();
                game_over5.setPosition(getCoorX(0), getCoorY(0));
                game_over5.paint(g);
                flushGraphics();
                hilo.sleep(100);
                alert_sound("/Sounds/screamover.wav");
                Game_Over.setPosition(getCoorX(100)-Game_Over.getWidth()/2, getCoorY(100)-Game_Over.getHeight()/2);
                Game_Over.paint(g);
                flushGraphics();
                hilo.sleep(5000);
                GameOver=true;
             } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }
        //Si el botón del centro ha sido presionado, se despliega el cuadro de texto
        if(pressed){
            text.setPosition(getCoorX(6), getCoorY(136));
            text.paint(g);
        }
        //Si se ha encontrado la llave, se pinta la llave
        if(llave){
            key.setPosition(getCoorX(5), getCoorY(5));
            key.paint(g);
        }
        //Si el muñeco abrió la puerta, se indica al usuario que ganó
        if(win)
        {
            Winner.setPosition(getCoorX(0), getCoorY(0));
            Winner.paint(g);
            
        }
        //Se despliegan los mensajes
        g.drawString(mensaje, getCoorX(10), getCoorY(146), 0);  
        g.drawString(mensaje2, getCoorX(10), getCoorY(166), 0);
        try {
            if(win)
                hilo.interrupt();
            hilo.sleep(100);
            //Contador de tiempo de vida
            cont_seg++;
            if(cont_seg==10){
                ver_tiempo=""+tiempo;
                tiempo--;
                cont_seg=0;
                if(tiempo<=0){
                    tiempo=0;
                                 
                }
            }
            g.drawString(ver_tiempo, getCoorX(175), getCoorY(2), 0);
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
        flushGraphics();
        
    }
    
    /**
     * Nombre: alert_sound
     * Descripción: Estable el sonido de fondo del juego para luego reproducirlo
     * Pre: Direccion donde esta ubicado el archivo de sonido
     * Post: sonido en ejecución
     * No hay valor de retorno
     * @param Sonido de tipo String
     */
    public void alert_sound(String Sonido){
        try {       
            
            pbg.close();
            InputStream in = getClass().getResourceAsStream(Sonido);
            player = Manager.createPlayer(in, "audio/x-wav");
            player.start();
            player.prefetch();
            hilo.sleep(player.getDuration()/1000);
            player.close();
            playsndBg("/Sounds/creepy2.mid");
            
            
        } catch (Exception e) {
        }
    }
    
    /**
     * Nombre: mostrar_mensaje
     * Descripción: despliega el cuadro de texto y el mensaje en mensaje y mensaje2, luego los vacía
     * Pre: no hay
     * Post: mensajes desplegados y limpiados
     * No hay valor de retorno ni parámetros
     */
    public void mostrar_mensaje(){
        try {
            paintSprite();
            hilo.sleep(2000);
            pressed=false;
            mensaje = "";
            mensaje2 = "";
      
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * Nombre: eventoTecla
     * Descripción: realiza una acción para las teclas presionadas
     * Pre: tecla presionada
     * Post: acción realizada
     * No tiene parámetros ni valor de retorno
     */
    public void eventoTecla(){
        
        switch(tecla){
            case 0:
                if(tmp==0){
                    setDollAction(back);
                    dollAction.setFrame(0);
                    tmp=1;
                    break;  
                  }
                else{
                    break;
                }
                                  
            case GAME_B_PRESSED:
                coorX=10; //coordenada del jugador en x
                coorY=200; //coordenada del jugador en y
                break;
            case UP_PRESSED:
                setDollAction(front);
                //Verifica si llega al límite superior del cuarto
                if (getCoorY(coorY)>getCoorY(40)+dollAction.getHeight()){
                    //Verifica si choca con algún elemento
                    if(getDollAction().collidesWith(table, true)){
                    }
                    else if(getDollAction().collidesWith(drawer, true)){
                    }
                    else if(getDollAction().collidesWith(bed, true)){
                    }
                    else if(getDollAction().collidesWith(chair1, true)){
                    }
                    else if(getDollAction().collidesWith(chair2, true)){
                    }
                    else if(getDollAction().collidesWith(plant1, true)){
                    }
                    else if(getDollAction().collidesWith(candles, true)){
                    }
                    else if(getDollAction().collidesWith(table1, true)){
                    }
                    else if(getDollAction().collidesWith(plant2, true)){
                    }
                    else if(getDollAction().collidesWith(chest, true)){
                    }
                    else if(getDollAction().collidesWith(chair3, true)){
                    }
                    //Si no choca, se mueve en la dirección establecida
                    else
                        coorY-=dy; 
                }
                   
                dollAction.nextFrame();
                break;
                
            case DOWN_PRESSED:
                setDollAction(back);
                if(getCoorY(coorY)<getCoorY(200))
                    //Verifica si choca con algún elemento
                    if(getDollAction().collidesWith(table, true)){
                    }
                    else if(getDollAction().collidesWith(drawer, true)){
                    }
                    else if(getDollAction().collidesWith(bed, true)){
                    }
                    else if(getDollAction().collidesWith(chair1, true)){
                    }
                    else if(getDollAction().collidesWith(chair2, true)){
                    }
                    else if(getDollAction().collidesWith(plant1, true)){
                    }
                    else if(getDollAction().collidesWith(candles, true)){
                    }
                    else if(getDollAction().collidesWith(table1, true)){
                    }
                    else if(getDollAction().collidesWith(plant2, true)){
                    }
                    else if(getDollAction().collidesWith(chest, true)){
                    }
                    else if(getDollAction().collidesWith(chair3, true)){
                    }
                    //Si no choca, se mueve en la dirección indicada
                    else
                        coorY+=dy;
                dollAction.nextFrame();
                break;
                
            case LEFT_PRESSED:
                setDollAction(left);
                if(getCoorX(coorX)>getCoorX(10))
                    //Verifica si choca con algún elemento
                    if(getDollAction().collidesWith(table, true)){
                    }
                    else if(getDollAction().collidesWith(drawer, true)){
                    }
                    else if(getDollAction().collidesWith(bed, true)){
                    }
                    else if(getDollAction().collidesWith(chair1, true)){
                    }
                    else if(getDollAction().collidesWith(chair2, true)){
                    }
                    else if(getDollAction().collidesWith(plant1, true)){
                    }
                    else if(getDollAction().collidesWith(candles, true)){
                    }
                    else if(getDollAction().collidesWith(table1, true)){
                    }
                    else if(getDollAction().collidesWith(plant2, true)){
                    }
                    else if(getDollAction().collidesWith(chest, true)){
                    }
                    else if(getDollAction().collidesWith(chair3, true)){
                    }
                    //Si no choca, se mueve en la dirección indicada
                    else
                        coorX-=dx;
                dollAction.nextFrame();
                break;
                
            case RIGHT_PRESSED:
                setDollAction(right);
                if(getCoorX(coorX)<getCoorX(190)-dollAction.getWidth())
                    //Verifica si choca con algún elemento
                    if(getDollAction().collidesWith(table, true)){
                    }
                    else if(getDollAction().collidesWith(drawer, true)){
                    }
                    else if(getDollAction().collidesWith(bed, true)){
                    }
                    else if(getDollAction().collidesWith(chair1, true)){
                    }
                    else if(getDollAction().collidesWith(chair2, true)){
                    }
                    else if(getDollAction().collidesWith(plant1, true)){
                    }
                    else if(getDollAction().collidesWith(candles, true)){
                    }
                    else if(getDollAction().collidesWith(table1, true)){
                    }
                    else if(getDollAction().collidesWith(plant2, true)){
                    }
                    else if(getDollAction().collidesWith(chest, true)){
                    }
                    else if(getDollAction().collidesWith(chair3, true)){
                    }
                    //Si no choca, se mueve en la dirección indicada
                    else
                        coorX+=dx;
                dollAction.nextFrame();
                break;
            
            //Tecla del centro presionada    
            case 256:
                //Si está frente a la mesa, se verifica si la llave está sobre ella
                if(getDollAction().collidesWith(table, true)){
                    if(ingles){
                        mensaje="Table...";
                    }
                    else {
                        mensaje="Mesa...";
                    }
                    pressed=true;
                    if(verificar==0){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está sobre la mesa, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está en frente al gavetero, se verifica si la llave está dentro de el
                else if(getDollAction().collidesWith(drawer, true)){
                    if(ingles) {
                        mensaje="Drawer...";
                    }
                    else {
                        mensaje="Gavetero...";
                    }
                    pressed=true;
                    if(verificar==1){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no esta aqui, la cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la cama, se verifica si la llave está sobre ella
                else if(getDollAction().collidesWith(bed, true)){
                    if(ingles){
                        mensaje="Bed...";
                    }
                    else {
                        mensaje="Cama...";
                    }
                    pressed=true;
                    if(verificar==2){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no esta aqui, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la silla, se verifica si la llave está sobre ella
                else if(getDollAction().collidesWith(chair1, true)){
                    if(ingles){
                        mensaje="Chair...";
                    }
                    else {
                        mensaje="Silla...";
                    }
                    pressed=true;
                    if(verificar==3){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no esta aqui, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la silla, se verifica si la llave está sobre ella
                else if(getDollAction().collidesWith(chair2, true)){
                    if(ingles){
                        mensaje="Chair...";
                    }
                    else {
                        mensaje="Silla...";
                    }
                    pressed=true;
                    if(verificar==4){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aqui, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la planta, se verifica si la llave está en ella
                else if(getDollAction().collidesWith(plant1, true)){
                    if(ingles){
                        mensaje="Plant...";
                    }
                    else 
                        mensaje="Planta...";
                    pressed=true;
                    if(verificar==5){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente al candelabro, se verifica si la llave en sobre el
                else if(getDollAction().collidesWith(candles, true)){
                    if(ingles){
                        mensaje="Candelabra...";
                    }
                    else {
                        mensaje="Candelabro...";
                    }
                    pressed=true;
                    if(verificar==6){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la mesa con el libro, se verifica si la llave está sobre ella
                else if(getDollAction().collidesWith(table1, true)){
                    if(ingles){
                        mensaje="Table...";
                    }
                    else {
                        mensaje="Mesa...";
                    }
                    pressed=true;
                    if(verificar==7){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la planta, verifica si la llave está en ella
                else if(getDollAction().collidesWith(plant2, true)){
                    if(ingles){
                        mensaje="Plant...";
                    }
                    else {
                        mensaje="Planta...";
                    }
                    pressed=true;
                    if(verificar==8){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente al cofre, verifica si la llave está dentro
                else if(getDollAction().collidesWith(chest, true)){
                    if(ingles){
                        mensaje="Chest...";
                    }
                    else {
                        mensaje="Cofre...";
                    }
                    pressed=true;
                    if(verificar==9){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la silla, verifica si la llave está sobre ella
                else if(getDollAction().collidesWith(chair3, true)){
                    if(ingles){
                        mensaje="Chair...";
                    }
                    else {
                        mensaje="Silla...";
                    }
                    pressed=true;
                    if(verificar==10){
                        if(!llave){
                            llave=true;
                            if(ingles){
                                mensaje2="I found a rusted key!";
                            } 
                            else {
                                mensaje2="¡Encontré una llave oxidada!";
                            }
                        }
                    }
                    //Si la llave no está aquí, se cambia de lugar
                    else{
                        if(!llave) {
                            verificar=rnd.nextInt(11);
                        }
                    }
                    mostrar_mensaje();
                }
                //Si está frente a la puerta, se verifica si tiene la llave o no
                else if(getCoorY(coorY)<getCoorY(50)+dollAction.getHeight()&&getCoorX(coorX)<getCoorX(145)-dollAction.getWidth()&&getCoorX(coorX)>getCoorX(110)){
                    pressed = true;
                    //Si tiene la llave, gana el juego
                    if(llave){
                        if(ingles){
                            mensaje="The door is unlocked";
                        }
                        else {
                            mensaje="La puerta está abierta";
                        }
                        win = true;
                    }
                    //Si no tiene la llave, se muestra mensaje de que debe encontrarla
                    else{
                        if(ingles){
                            mensaje = "The door is closed. The";
                            mensaje2 = "key should be here.";
                        }
                        else{
                            mensaje = "La puerta está cerrada.";
                            mensaje2 = "La llave debe estar por aquí";
                        }
                    }
                    mostrar_mensaje();
                }
                //Si no está frente a ningún elemento, se escucha un grito y se muestra un mensaje
                else{
                    if(ingles){
                        mensaje = "I need to get out";
                        mensaje2 = "of here";
                    }
                    else{
                        mensaje="Necesito salir de aquí";
                    }
                    pressed=true;
                    alert_sound("/Sounds/scream6.wav");
                    mostrar_mensaje();
                    
                }
                break;
            
                
        
        }
    }
    
    /**
     * Nombre: doScript
     * Descripcion: realiza la lectura del script ingresado y lo transforma en movimientos
     * Pre: script no es null
     * Post: accion realizada
     * No tiene valor de retorno ni parámetros
     */
    public void doScript(){
        char[] c= new char[script.size()];
        script.getChars(c);
        for(int i=0; i<script.size(); i++){
            switch(c[i]){
                case 'w': 
                    tecla = UP_PRESSED;
                    eventoTecla();    
                    paint();
                    break;
                case 'a':
                    tecla = LEFT_PRESSED;
                    eventoTecla();    
                    paint();
                    break;
                case 's':
                    tecla = DOWN_PRESSED;
                    eventoTecla();    
                    paint();
                    break;
                case 'd':
                    tecla = RIGHT_PRESSED;
                    eventoTecla();    
                    paint();
                    break;
                case 'c':
                    tecla = 256;
                    eventoTecla();    
                    paint();
                    break;
                case 't':
                    tecla = GAME_B_PRESSED;
                    eventoTecla();
                    paint();
                    break;
                    
                 
            }
        }
       scriptbool=false; 
        
    }
    
    /**
     *
     * @param keyCode
     */
    protected void keyPressed(int keyCode) {
    }

    /**
     * Called when a key is released.
     * @param keyCode 
     */
    protected void keyReleased(int keyCode) {
    }

    /**
     * Called when a key is repeated (held down).
     * @param keyCode 
     */
    protected void keyRepeated(int keyCode) {
    }

    /**
     * Called when the pointer is dragged.
     * @param x 
     * @param y 
     */
    protected void pointerDragged(int x, int y) {
    }

    /**
     * Called when the pointer is pressed.
     * @param x 
     * @param y 
     */
    protected void pointerPressed(int x, int y) {
    }

    /**
     * Called when the pointer is released.
     * @param x 
     * @param y 
     */
    protected void pointerReleased(int x, int y) {
    }

    /**
     * Called when action should be handled
     * @param command
     * @param displayable  
     */
    public void commandAction(Command command, Displayable displayable) {  
       
        if(command.getCommandType() == Command.EXIT){
            hilo.interrupt();
            pbg.close();
            Display.getDisplay(midletAnterior).setCurrent(midletAnterior.inicio);
        }
        if(command.getCommandType()==Command.SCREEN){
         formulario =new Form("Script");
         script = new TextField("Orden:", "", 30, TextField.ANY);
         ok = new Command("OK", Command.OK, 1);
         item = new StringItem("Tiempo: ",""+this.tiempo);
         formulario.append(item);
       
         formulario.append(script); 
         formulario.addCommand(ok);
         formulario.setCommandListener(this);
         orden=Display.getDisplay(midletAnterior);
         orden.setCurrent(formulario);
        }
         if(command.getCommandType() == Command.OK){
            comandos=script.getString();
            
            Display.getDisplay(midletAnterior).setCurrent(midletAnterior.canvas);
            scriptbool=true;
            
        }
            
        
    }
 


}
